# -*- coding: utf-8 -*-

import base
from multiplexException import MultiplexException

class Multiplex:
    def __init__(self, pontos_controle, registradores_entrada):
        self.entradas = registradores_entrada
        self.pontos_controle = pontos_controle
        self._checa_quantidades(len(pontos_controle), len(registradores_entrada))
        self._saida
    
    def _get_saida(self):
        return self._saida
    
    def _calcula_saida(self):
        pos = 0
        i = 0
        for flag in pontos_controles:
            if flag.flag == '1':
                pos = pos + (2 ** i)
            i = i + 1
        return pos
    
    def clock(self):
        pos = self._calcula_saida()
        self._saida = registradores_entrada[pos].valor
    
    saida = property(_get_saida)
    
    def _checa_quantidades(self, tot_pontos_controle, tot_registradores_entrada):
        if (2 ** tot_pontos_controle) < tot_registradores_entrada:
            raise MultiplexException(tot_pontos_controle, tot_registradores_entrada)
